package org.sintec.AndroidCarConnectivity;

import org.sintec.AndroidCarConnectivity.activityDeviceList;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Binder;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class ConnectivityArduino2Activity extends Activity 
{
	protected static final int REQUEST_CONNECT_DEVICE = 0;
	private serviceConnectivity mBoundService;
	private boolean mIsBound = false;
	private String mBtAddress = "";
	
	/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        // Initialize buttons
        Button btnStartService = (Button) findViewById(R.id.btnStartService);
        btnStartService.setOnClickListener(new OnClickListener()
        {
            public void onClick(View v)
            {
            	//startService(new Intent (ConnectivityArduino2Activity.this, ConnectivityService.class));
            	doBindService();
            }
        });
        
        Button btnStopService = (Button) findViewById(R.id.btnStopService);
        btnStopService.setOnClickListener(new OnClickListener()
        {
            public void onClick(View v)
            {
            	doUnbindService();
            	//stopService(new Intent (ConnectivityArduino2Activity.this, ConnectivityService.class));
            }
        });
        
        Button btnShowDevicelistActivity = (Button) findViewById(R.id.btnShowDevicelistActivity);
        btnShowDevicelistActivity.setOnClickListener(new OnClickListener()
        {
            public void onClick(View v)
            {
            	Intent serverIntent = new Intent(ConnectivityArduino2Activity.this, activityDeviceList.class);
                startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE);
            }
        });
    }
    
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
    	if (requestCode == REQUEST_CONNECT_DEVICE)
    	{
    		if (resultCode == RESULT_OK)
    		{
                String address = data.getStringExtra(activityDeviceList.EXTRA_DEVICE_ADDRESS);
                mBtAddress  = address;
    			Toast.makeText(this, address, Toast.LENGTH_SHORT).show();
    		}
    	}
    }
    
    // Working with service stuff
    private ServiceConnection mConnection = new ServiceConnection()
    {
        public void onServiceConnected(ComponentName className, IBinder service)
        {
            // This is called when the connection with the service has been
            // established, giving us the service object we can use to
            // interact with the service.  Because we have bound to a explicit
            // service that we know is running in our own process, we can
            // cast its IBinder to a concrete class and directly access it.
            mBoundService = ((serviceConnectivity.ConnectivityBinder)service).getService();

            // Tell the user about this for our demo.
            Toast.makeText(ConnectivityArduino2Activity.this, R.string.title_service_connected,
                    Toast.LENGTH_SHORT).show();
        }

        public void onServiceDisconnected(ComponentName className) {
            // This is called when the connection with the service has been
            // unexpectedly disconnected -- that is, its process crashed.
            // Because it is running in our same process, we should never
            // see this happen.
            mBoundService = null;
            Toast.makeText(ConnectivityArduino2Activity.this, R.string.title_service_disconnected,
                    Toast.LENGTH_SHORT).show();
        }
    };

    void doBindService()
    {
        // Establish a connection with the service.  We use an explicit
        // class name because we want a specific service implementation that
        // we know will be running in our own process (and thus won't be
        // supporting component replacement by other applications).
        Intent startIntent = new Intent(ConnectivityArduino2Activity.this, serviceConnectivity.class);
        startIntent.putExtra("btAddress", mBtAddress);
        
    	bindService(startIntent, mConnection, Context.BIND_AUTO_CREATE);
        mIsBound  = true;
    }

    void doUnbindService()
    {
        if (mIsBound)
        {
            // Detach our existing connection.
            unbindService(mConnection);
            mIsBound = false;
        }
    }
    
    @Override
    protected void onDestroy()
    {
        super.onDestroy();
        doUnbindService();
    }
}